package com.d0318;

import java.util.concurrent.TimeUnit;

public class Resource {
    public synchronized void f() {
        System.out.println(Thread.currentThread().getName() + "not synchronized f() is running");
        synchronized (this) {
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + "f() is running.");
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public synchronized void g() {
        System.out.println(Thread.currentThread().getName() + "not synchronized g() is running");
        synchronized (this) {
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + "g() is running.");
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public synchronized void h() {
        System.out.println(Thread.currentThread().getName() + "not synchronized h() is running");
        synchronized (this) {
            for (int i = 0; i < 5; i++) {
                System.out.println(Thread.currentThread().getName() + "h() is running.");
                try {
                    TimeUnit.SECONDS.sleep(2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args) {
      Resource resource=new Resource();
      new Thread(()->resource.f()).start();
      new Thread(()->resource.g()).start();
      new Thread(()->resource.h()).start();
      resource.f();
      resource.g();
      resource.h();
    }
}

